package com.dz.lm.service.userproduct;

import com.dz.lm.common.dto.PageDto;
import com.dz.lm.common.dto.UserProductDTO;
import com.dz.lm.common.exception.ServiceException;
import com.dz.lm.domain.userproduct.UserProduct;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.Map;

/**产品服务层
 * @version 1.8;
 * @author: LDY;
 * @Description;
 * @Date: Created in 2020/3/7 20:36;
 */
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)

public interface UserProductService {
    int add(UserProduct product) throws ServiceException;

    int update(UserProduct product) throws ServiceException;

    /**
     * 小程序上传产品照片
     * @param map
     * @return
     * @throws ServiceException
     */
    int updateImage(Map map) throws ServiceException;
    /**
     * 列表
     * @param pageNum
     * @param rows
     * @param uid 当前登录人
     * @param userId 所属人
     * @param source 原产品所属人
     * @param search 查询内容
     * @param type 1原生 2代理
     * @param status -1-下架 1-未发布 2发布
     * @param province 省
     * @param orderType 1 按申请数量 2按发布时间  0默认
     * @return
     * @throws ServiceException
     */
    PageDto query(int pageNum, int rows, int uid,int userId, int source,String search, int type, int status, String province,String city,int orderType)throws ServiceException;

    /**
     * 更改产品状态
     * @param productId
     * @param status -1-下架 1-未发布 2发布
     * @return
     * @throws ServiceException
     */
    int updateLowe(int productId,int status ,String province ,String city) throws ServiceException;

    /**
     * 详情
     * @param productId
     * @return
     * @throws ServiceException
     */
    UserProductDTO getDeail(int productId,int uid)throws ServiceException;

    /**
     * 获取用户相关产品信息
     * @param uid 用户主页id
     * @param userId 当前登陆人
     * @return
     * @throws ServiceException
     */
    Map getUser(String uid,int userId)throws ServiceException;

    /**
     * 获取平台所有有效人
     * @param pageNum
     * @param rows
     * @param notUid 去除当前人
     * @param order 1按粉丝数排序
     * @return
     * @throws ServiceException
     */
    PageDto getAllUser(int pageNum,int rows,int notUid,String order) throws ServiceException;

    /**
     * 详情
     * @param uid 当前人
     * @param productId 项目
     * @param isDetail 是否详情
     * @return
     * @throws ServiceException
     */
    UserProductDTO getDetail(int uid,int productId,boolean isDetail) throws ServiceException;

    /**
     * 更新代理状态
     * @param source 远产品创建人
     * @param  subProudcId 代理的原产品
     * @param productId 产品
     * @param agentStatus 代理状态0-原生产品
     * 1-正常代理 2产品下架,删除3-取消代理4-返点发生变化
     * @param productType 产品类型 1原生 2代理
     * @param returnPoint 修改返点
     * @param price 价格 大于-1时
     * @return
     * @throws ServiceException
     */
    int updateAgent(int source,int subProudcId,int productId,int agentStatus,int productType,double returnPoint ,double price) throws ServiceException;

    /**
     * 查询邀请产品
     * @param page
     * @param rows
     * @param uid 邀请对象id
     * @param satus 0-发送1接受-2-拒绝
     * @return
     * @throws ServiceException
     */
    PageDto querSends(int page,int rows,int uid,int satus) throws ServiceException;

    /**
     * 删除产品
     * @param productId
     * @return
     * @throws ServiceException
     */
    int delete(int productId) throws ServiceException;

    /**
     * 获取首页推荐
     * @return
     * @throws ServiceException
     */
    PageDto Recommend(int pageNum ,int rows , int uid ,int type,String province,String city)throws ServiceException;

}
